Реализация gRPC-метода LoginUser в auth-service
Проверка хэша пароля в PostgreSQL, генерация TokenPair с инъекцией Claims и фиксация сессии.
NoteКраткая карточка задачи
- Репозиторий / Компонент:
auth-service(Backend контура авторизации). - Категория: Бэкенд.
- Контракт методов: gRPC
rpc LoginUser(LoginRequest) returns (LoginResponse); - Спецификация контракта: См. Раздел: Protobuf Контракт: LoginUser
- Статус: Готово к реализации
Предварительные условия (Prerequisites):
- Убедиться, что gRPC-сообщение зафиксировано в репозитории контрактов строго по Спецификации Protobuf и стабы обновлены.
Инструкция по шагам:
- На Шаге 3 (Прием и валидация): Реализовать gRPC-хэндлер
LoginUser. Если поляemailилиpasswordотсутствуют или переданы в невалидном формате, возвращать ошибкуgRPC Status: INVALID_ARGUMENT. - На Шаге 4-5 (Поиск в БД): Сделать запрос к СУБД PostgreSQL (
DB_AUTH):SELECT id, password_hash FROM users WHERE email = :email LIMIT 1;. Если запись отсутствует, прерывать выполнение и отдаватьgRPC Status: NOT_FOUND. - На Шаге 5-продолжение (Крипто-проверка): В памяти сервиса выполнить валидацию сырого пароля против хэша (Bcrypt/Argon2). При несовпадении генерировать ошибку
gRPC Status: UNAUTHENTICATED(неверный пароль). - На Шаге 6 (Генерация JWT и инъекция Claims): Инициировать метод
GenerateTokenPair. Внедрить в структуру Payload JWT токена обязательные бизнес-параметры пользователя:user_id,home_group_idиaccount_typeсогласно разделу JWT Claims Specification. - На Шаге 7 (Сохранение сессии): Записать хэш созданного
refresh_tokenв таблицуuser_sessions. После успешного коммита транзакции сформировать и вернуть шлюзу структуруLoginResponse.
- На Шаге 3 (Прием и валидация): Реализовать gRPC-хэндлер